// Generated from Program.g4 by ANTLR 4.1

package antlr;

import testaux.*;
import java.util.Arrays;

import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTreeListener;

/**
 * This interface defines a complete listener for a parse tree produced by
 * {@link ProgramParser}.
 */
public interface ProgramListener extends ParseTreeListener {
	/**
	 * Enter a parse tree produced by {@link ProgramParser#ret}.
	 * @param ctx the parse tree
	 */
	void enterRet(@NotNull ProgramParser.RetContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#ret}.
	 * @param ctx the parse tree
	 */
	void exitRet(@NotNull ProgramParser.RetContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#if_st}.
	 * @param ctx the parse tree
	 */
	void enterIf_st(@NotNull ProgramParser.If_stContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#if_st}.
	 * @param ctx the parse tree
	 */
	void exitIf_st(@NotNull ProgramParser.If_stContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#condition}.
	 * @param ctx the parse tree
	 */
	void enterCondition(@NotNull ProgramParser.ConditionContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#condition}.
	 * @param ctx the parse tree
	 */
	void exitCondition(@NotNull ProgramParser.ConditionContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#invocation}.
	 * @param ctx the parse tree
	 */
	void enterInvocation(@NotNull ProgramParser.InvocationContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#invocation}.
	 * @param ctx the parse tree
	 */
	void exitInvocation(@NotNull ProgramParser.InvocationContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#block}.
	 * @param ctx the parse tree
	 */
	void enterBlock(@NotNull ProgramParser.BlockContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#block}.
	 * @param ctx the parse tree
	 */
	void exitBlock(@NotNull ProgramParser.BlockContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#ident_list}.
	 * @param ctx the parse tree
	 */
	void enterIdent_list(@NotNull ProgramParser.Ident_listContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#ident_list}.
	 * @param ctx the parse tree
	 */
	void exitIdent_list(@NotNull ProgramParser.Ident_listContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#expr}.
	 * @param ctx the parse tree
	 */
	void enterExpr(@NotNull ProgramParser.ExprContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#expr}.
	 * @param ctx the parse tree
	 */
	void exitExpr(@NotNull ProgramParser.ExprContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#factor}.
	 * @param ctx the parse tree
	 */
	void enterFactor(@NotNull ProgramParser.FactorContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#factor}.
	 * @param ctx the parse tree
	 */
	void exitFactor(@NotNull ProgramParser.FactorContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#statement}.
	 * @param ctx the parse tree
	 */
	void enterStatement(@NotNull ProgramParser.StatementContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#statement}.
	 * @param ctx the parse tree
	 */
	void exitStatement(@NotNull ProgramParser.StatementContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#assignment}.
	 * @param ctx the parse tree
	 */
	void enterAssignment(@NotNull ProgramParser.AssignmentContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#assignment}.
	 * @param ctx the parse tree
	 */
	void exitAssignment(@NotNull ProgramParser.AssignmentContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#ident}.
	 * @param ctx the parse tree
	 */
	void enterIdent(@NotNull ProgramParser.IdentContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#ident}.
	 * @param ctx the parse tree
	 */
	void exitIdent(@NotNull ProgramParser.IdentContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#func_decl}.
	 * @param ctx the parse tree
	 */
	void enterFunc_decl(@NotNull ProgramParser.Func_declContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#func_decl}.
	 * @param ctx the parse tree
	 */
	void exitFunc_decl(@NotNull ProgramParser.Func_declContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#term}.
	 * @param ctx the parse tree
	 */
	void enterTerm(@NotNull ProgramParser.TermContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#term}.
	 * @param ctx the parse tree
	 */
	void exitTerm(@NotNull ProgramParser.TermContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#program}.
	 * @param ctx the parse tree
	 */
	void enterProgram(@NotNull ProgramParser.ProgramContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#program}.
	 * @param ctx the parse tree
	 */
	void exitProgram(@NotNull ProgramParser.ProgramContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#func_list}.
	 * @param ctx the parse tree
	 */
	void enterFunc_list(@NotNull ProgramParser.Func_listContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#func_list}.
	 * @param ctx the parse tree
	 */
	void exitFunc_list(@NotNull ProgramParser.Func_listContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#nat}.
	 * @param ctx the parse tree
	 */
	void enterNat(@NotNull ProgramParser.NatContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#nat}.
	 * @param ctx the parse tree
	 */
	void exitNat(@NotNull ProgramParser.NatContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#st_list}.
	 * @param ctx the parse tree
	 */
	void enterSt_list(@NotNull ProgramParser.St_listContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#st_list}.
	 * @param ctx the parse tree
	 */
	void exitSt_list(@NotNull ProgramParser.St_listContext ctx);

	/**
	 * Enter a parse tree produced by {@link ProgramParser#expr_list}.
	 * @param ctx the parse tree
	 */
	void enterExpr_list(@NotNull ProgramParser.Expr_listContext ctx);
	/**
	 * Exit a parse tree produced by {@link ProgramParser#expr_list}.
	 * @param ctx the parse tree
	 */
	void exitExpr_list(@NotNull ProgramParser.Expr_listContext ctx);
}